const mysql = require('mysql');
const db = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'root',
    database: 'my_db',
    port: 3306
});

// 使用ES6 class语法定义一个模型基类，用于实现面向对象数据库操作
module.exports = class model {
    // 静态查询方法，无需实例化即可调用
    // 参数: sql - SQL语句, params - 查询参数(防止SQL注入)
    static query(sql, params) {
        // 返回Promise对象实现异步操作
        return new Promise((resolve, reject) => {
            // 从数据库连接池获取连接
            pool.getConnection((err, connection) => {
                // 处理连接错误
                if (err) {
                    // 连接数据库报错处理
                    console.log(err);  // 打印错误日志
                    if (connection) connection.release(); // 确保连接存在后释放
                    reject(err);       // 拒绝Promise
                    return;            // 提前返回
                }

                // 执行SQL查询
                connection.query(sql, params, (err, result) => {
                    connection.release(); // 无论成功失败都释放连接回连接池

                    // 处理查询错误
                    if (err) {
                        reject(err);  // SQL执行错误时拒绝Promise
                    } else {
                        // 检查受影响行数(仅对INSERT/UPDATE/DELETE有意义)
                        // 注意: SELECT查询没有affectedRows属性
                        if (result.affectedRows === 0) {
                            // 创建自定义错误对象
                            const noChangeError = new Error('No rows affected');
                            noChangeError.code = 'NO_CHANGE';
                            reject(noChangeError);
                        } else {
                            resolve(result); // 成功时返回查询结果
                        }
                    }
                });
            });
        });
    }
}
